package main

import (
	"fmt"
	simplejson "github.com/bitly/go-simplejson"
)

var jsonStr = `{
  "msg" : "Success",
  "result" : {
    "timeline" : {
      "rows" : [ {
        "startTs" : 1528434707000,
        "number" : "x12887"
      }, {
        "startTs" : 1528434720000,
        "number" : "x13028"
      }, {
        "startTs" : 1528434721000,
        "number" : "x12975"
      }],
      "total" : 803254
    }
  }
}`

func main() {

	res, err := simplejson.NewJson([]byte(jsonStr))

	if err != nil {
		fmt.Printf("%v\n", err)
		return
	}
	res.SetPath([]string{"result","total"}, 1)
	// 未包含的key, 赋予默认值
	//val := res.Get("company").MustString("example.com")
	fmt.Println(res.GetPath("result","total").MustInt64()) //example.com

	//获取json字符串中的 result 下的 timeline 下的 rows 数组
	//rows, err := res.Get("result").Get("timeline").Get("rows").Array()
	//
	////遍历rows数组
	//for _, row := range rows {
	//	//对每个row获取其类型，每个row相当于 C++/Golang 中的map、Python中的dict
	//	//每个row对应一个map，该map类型为map[string]interface{}，也即key为string类型，value是interface{}类型
	//	if eachMap, ok := row.(map[string]interface{}); ok {
	//
	//		//可以看到eachMap["startTs"]类型是json.Number
	//		//而json.Number是golang自带json库中decode.go文件中定义的: type Number string
	//		//因此json.Number实际上是个string类型
	//		fmt.Println(reflect.TypeOf(eachMap["startTs"]))
	//
	//		if startTs, ok := eachMap["startTs"].(json.Number); ok {
	//			startTsInt, err := strconv.ParseInt(string(startTs), 10, 0)
	//			if err == nil {
	//				fmt.Println(startTsInt)
	//			}
	//		}
	//
	//		if number, ok := eachMap["number"].(string); ok {
	//			fmt.Println(number)
	//		}
	//
	//		fmt.Println()
	//	}
	//}
	//r, _ := res.GetPath("user","age").Int()
	//fmt.Println(r)
}
